

#ifndef CHARACTER_CHARACTER_H_
#define CHARACTER_CHARACTER_H_

#include "../gba_types.h"

typedef struct{
	u16	 u00_;		//名字
	u16	 u02_;		//名字描述
	u8	 u04_;		//核心代码(最好别改)
	u8	 u05_;		//职业支援
	u8	 u06_;		//大头像
	u8	 u07_;		//未知
	u8	 u08_;		//小头像
	u8	 u09_;		//属性
	u8	 u0A_;		//未知

	u8	 u0B_;		//等级
	u8	 u0C_;		//HP
	u8	 u0D_;		//力魔力
	u8	 u0E_;		//技
	u8	 u0F_;		//速
	u8	 u10_;		//防
	u8	 u11_;		//魔防
	u8	 u12_;		//运
	u8	 u13_;		//体格加成


	u8	 u14_;		//剑
	u8	 u15_;		//枪
	u8	 u16_;		//斧
	u8	 u17_;		//弓
	u8	 u18_;		//杖
	u8	 u19_;		//理
	u8	 u1A_;		//光
	u8	 u1B_;		//暗

	u8	 u1C_;		//HP成长
	u8	 u1D_;		//力魔力成长
	u8	 u1E_;		//技成长
	u8	 u1F_;		//速成长
	u8	 u20_;		//运成长
	u8	 u21_;		//防成长
	u8	 u22_;		//魔防成长


	u8	 u23_;		//低级职业配色(废弃)			调色板
	u8	 u24_;		//高级职业配色(废弃)			调色板
	u8	 u25_;		//低级职业特殊造型(废弃)		烈火的是特别定制的战斗动画
	u8	 u26_;		//高级职业特殊造型(废弃)		烈火的是特别定制的战斗动画
	u8	 u27_;		//鬼知道是什么

	u8	 u28_;		//能力1
	u8	 u29_;		//能力2
	u8	 u2A_;		//能力3
	u8	 u2B_;		//能力4

	u32	 u2C_;		//支援指针

	u8	 u30_;		//未知
	u8	 u31_;		//同上
	u8	 u32_;		//同上+1
	u8	 u33_;		//同上+2
}Character;


typedef union{
	struct{
		u16	 u00_;		//名字
		u16	 u02_;		//名字描述
		u8	 u04_;		//核心代码(最好别改)
		u8	 u05_;		//职业支援
		u8	 u06_;		//大头像
		u8	 u07_;		//未知
		u8	 u08_;		//小头像
		u8	 u09_;		//属性
		u8	 u0A_;		//未知

		u8	 u0B_;		//等级
		u8	 u0C_;		//HP
		u8	 u0D_;		//力魔力
		u8	 u0E_;		//技
		u8	 u0F_;		//速
		u8	 u10_;		//防
		u8	 u11_;		//魔防
		u8	 u12_;		//运
		u8	 u13_;		//体格加成


		u8	 u14_;		//剑
		u8	 u15_;		//枪
		u8	 u16_;		//斧
		u8	 u17_;		//弓
		u8	 u18_;		//杖
		u8	 u19_;		//理
		u8	 u1A_;		//光
		u8	 u1B_;		//暗

		u8	 u1C_;		//HP成长
		u8	 u1D_;		//力魔力成长
		u8	 u1E_;		//技成长
		u8	 u1F_;		//速成长
		u8	 u20_;		//运成长
		u8	 u21_;		//防成长
		u8	 u22_;		//魔防成长


		u8	 u23_;		//低级职业配色(废弃)			调色板
		u8	 u24_;		//高级职业配色(废弃)			调色板
		u8	 u25_;		//低级职业特殊造型(废弃)		烈火的是特别定制的战斗动画
		u8	 u26_;		//高级职业特殊造型(废弃)		烈火的是特别定制的战斗动画
		u8	 u27_;		//鬼知道是什么

		u8	 u28_;		//能力1
		u8	 u29_;		//能力2
		u8	 u2A_;		//能力3
		u8	 u2B_;		//能力4

		u32	 u2C_;		//支援指针

		u8	 u30_;		//未知
		u8	 u31_;		//同上
		u8	 u32_;		//同上+1
		u8	 u33_;		//同上+2
	};
	//name
	struct{
		u16	 name_id;		//名字
		u16	 desc_id;		//名字描述
		u8	 core;			//核心代码(最好别改)
		u8	 class_icon;	//职业支援
		u8	 portrait1;		//大头像
		u8	 _u07_;		//未知
		u8	 portrait2;		//小头像
		u8	 affinity;		//属性
		u8	 _u0A_;		//未知

		u8	 level;		//等级
		u8	 base_hp;		//HP
		u8	 base_str;		//力魔力
		u8	 base_skill;		//技
		u8	 base_speed;		//速
		u8	 base_defense;		//防
		u8	 base_resistante;	//魔防
		u8	 base_luck;			//运
		u8	 const_bonus;		//体格加成


		u8	 level_sword;		//剑
		u8	 level_spear;		//枪
		u8	 level_axe;		//斧
		u8	 level_bow;		//弓
		u8	 level_staff;		//杖
		u8	 level_anima;		//理
		u8	 level_light;		//光
		u8	 level_dark;		//暗

		u8	 growth_hp;		//HP成长
		u8	 growth_str;		//力魔力成长
		u8	 growth_skill;		//技成长
		u8	 growth_speed;		//速成长
		u8	 growth_luck;		//运成长
		u8	 growth_defense;		//防成长
		u8	 growth_resistante;		//魔防成长


		u8	 pal1;		//低级职业配色(废弃)			调色板
		u8	 pal2;		//高级职业配色(废弃)			调色板
		u8	 anima1;		//低级职业特殊造型(废弃)		烈火的是特别定制的战斗动画
		u8	 anima2;		//高级职业特殊造型(废弃)		烈火的是特别定制的战斗动画
		u8	 _u27_;		//鬼知道是什么

//		u8	 u28_;		//能力1
//		u8	 u29_;		//能力2
//		u8	 u2A_;		//能力3
//		u8	 u2B_;		//能力4
		struct{
			u32	 ability;	//能力
		};

		u32	 supports_ptr;		//支援指针

		u8	 _u30_;		//未知
		u8	 _u31_;		//同上
		u8	 _u32_;		//同上+1
		u8	 _u33_;		//同上+2
	};
}CharacterData;


/*
小头像ID
0x01:		龙
0x02:		带蒙面的军人
0x03:		军人
0x04:		魔眼

0x08:		之后就没有了

*/


typedef struct{
    Character*  char_;		//人物指针									0
    struct Class* 		 class_;		//人物职业									4
    s8 			lv;			//等级										8
    u8 			exp;			//经验										9
	/*
	80AAA7E 程序读取这个值，
	攻击时(选定敌人)，读取
	*/
    s8 			unk_1;			//保留?										0xa
    s8 			uB_;          //0xb                        //队伍编号,  高位3bit b00:友方,B01:NPC,b10:敌方
    //u8 stat;		//状态,00表示可以无限移动					0xc						0xd
    u32 		stat;		//状态										0xc
    /*坐标*/
    s8 X;			//											0x10
    s8 Y;			//											0x11

    u8 maxHp;		//最大HP									0x12
    u8 hp;			//当前hp									0x13
    s8 str;			//力量										0x14
    s8 skill;		//技术										0x15
    s8 speed;		//速度										0x16
    s8 defence;		//防守										0x17
    s8 res;			//魔防										0x18
    s8 luck;		//幸运										0x19
    s8 con;			//体格										0x1a
    //u8 r2[2];		//未确定,									0x1b
	/*同行，救出的角色编号*/
    u8 unk_1b;
	/*0x080d6932 获取该值 */
    u8 unk_1c;
    u8 move;		//增加的移动力								0x1d
/*
    u8 item1ID;		//物品ID
    u8 item1num;	//物品数
    u8 item2ID;		//物品ID
    u8 item2num;	//物品数
    u8 item3ID;		//物品ID
    u8 item3num;	//物品数
    u8 item4ID;		//物品ID
    u8 item4num;	//物品数
    u8 item5ID;		//物品ID
    u8 item5num;	//物品数
*/
    u16 item[5];	//物品0xa									0x1e-0x27

//    u8 arank;		//剑等级									0x28
//    u8 brank;		//枪等级									0x29
//    u8 crank;		//斧等级									0x2a
//    u8 drank;		//弓等级									0x2b
//    u8 erank;		//杖等级									0x2c
//    u8 frank;		//理等级									0x2d
//    u8 grank;		//光等级									0x2e
//    u8 hrank;		//暗等级									0x2f
    u8 rank[8];     //熟练度                                   0x28-0x2f

    //u8 r3[2];		//未确定									0x30
	/*
	人物状态,高4位是回合数,低4位是状态,1,中毒,2昏睡,3沉默,4,混乱,
	5，攻击鼓舞,6守备鼓舞,7,必杀,8回避		0x30
	9,生病
	0xb,石化
	8,
	*/
    u8 stat2;	//0x30
	/*
	魔防杖效果， 高4位为增加魔防，低4位为回合
	*/
	u8 r3;		//0x31
    u8 support[7];	//支援,未确定大小?							0x32
    // 0x80aa9d6 获得0x39 值
	/*
	[0x39] & 0x1
	[0x39] & 6
	[0x39] & 0x18
	[0x39] & 0x60
	r4[1] 	未检测到
	r4[2]   未检测到
	*/
	u8 r4[3];		//保留?										0x39
    u8* mp1;			//指针,不知道是啥							0x3C
    u8 r6[4];		//未确定?									0x40-0x47
	u32	r7;			//游戏AI
	// 03 站着
	//
}characterInfo;

typedef characterInfo Unit;

typedef struct
{
	///* data */
	u8	id[0x15];
	u8	num;		//支援个数
}support;


static int Unit_exisItem(Unit*u,u8 item){
    int x;
    for(x=0;x<5;x++){
        if((u->item[x]&0xff)==item){
            return 1;
        }
    }
    return 0;
};

//FE8 1:0203A4E8 2:
typedef struct{
    Unit unit;
/*5A*/   s16 att;
/*0x60*/ s16 hit,avoid,u64_,cri;   //0x0203A548

}BattleUnit;



#endif /* CHARACTER_CHARACTER_H_ */
